/*
 * BaseDao.hpp
 *
 *  Created on: 2018年3月30日
 *      Author: yaoqiaobing
 */

#ifndef INCLUDE_DAO_BASEDAO_HPP_
#define INCLUDE_DAO_BASEDAO_HPP_

#include <string>
#include <map>
#include "lib_acl.h"
#include "db/query.hpp"
#include "db/mysql_conf.hpp"
#include "db/db_mysql.hpp"
#include "constant/SqlTypeEnum.hpp"


class BaseDao {
public:
	/**
	 * 构造函数
	 */
	BaseDao(const acl::mysql_conf& mysqlConf, const char* xmlPath);

	/**
	 * 构造函数
	 */
	BaseDao(acl::db_mysql* dbHandleMysql, const char* xmlPath);

	/**
	 * 析构函数
	 */
	~BaseDao();

	/**
	 * 构造连接句柄
	 */
	int createMysqlConnect();

	/**
	 * 解析出xml文件
	 */
	int parseXml();

	/**
	 * 调用createMysqlConnect和daoInit
	 */
	int daoInit();

	/**
	 * 执行sql
	 */
	const acl::db_rows* execSql(std::string idStr, acl::query& query, int& affected_rows);

	/**
	 * 添加表数据
	 */
	const int tbl_insert(acl::query& query);

	/**
	 * 删除表数据
	 */
	const int tbl_delete(acl::query& query);

	/**
	 * 更新表数据
	 */
	const int tbl_update(acl::query& query);

	/**
	 * 查询表数据
	 */
	const acl::db_rows* tbl_select(acl::query& query);
protected:
	// 对应写有sql语句的xml的位置
	std::string xmlPath_;
	// 读出的xml中所有数据
	char* xmlData_;
	// 结构化分析出的xml
	ACL_XML* xml_;
	// 分析出xml结果保存在此
	std::map<std::string, std::pair<sql_type, acl::query*>> xmlSql_;
	// 操作数据库句柄
	acl::db_mysql* dbHandleMysql_;
	// 数据库句柄来源
	bool dbPoolFlag_;
};



#endif /* INCLUDE_DAO_BASEDAO_HPP_ */
